package com.itany.corejava.code15_stream;

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;

/**
 * @author Miss Chen
 * @version 1.0
 * @date 2024年08月09日15:04
 */
public class Test02_中间操作 {
    private static List<Integer> list= Arrays.asList(13,13,78,98,67,45,34,87,100,300,400,500,600,200);

    public static void main(String[] args) {
        // test01();
        // test02();
        // test03();
        // test04();
        // findPage(3,4);
        // test05();
        // test06();
        test07();
    }

    public static void test01(){

        // 过滤操作，用于过滤元素是否符合指定规则
        // list.stream().filter(new Predicate<Integer>() {
        //     @Override
        //     public boolean test(Integer integer) {
        //         return integer%2==0;
        //     }
        // }).forEach(new Consumer<Integer>() {
        //     @Override
        //     public void accept(Integer integer) {
        //         System.out.println(integer);
        //     }
        // });

        list.stream()
                .filter(i->i%2==0)//过滤所有的偶数
                .forEach(System.out::println);//输出每个元素
    }

    public static void test02(){
        list.stream()
                .distinct()
                .forEach(System.out::println);
    }
    public static void test03(){
        list.stream()
                .limit(6)//获取前6个元素
                .forEach(System.out::println);
    }
    public static void test04(){
        list.stream()
                .skip(6)//跳过前6个，如果超出元素数量，则显示空流
                .forEach(System.out::println);
    }

    /**
     * 模拟分页
     * @param pageNo 页码
     * @param pageSize 每页数据量
     */
    public static void findPage(Integer pageNo,Integer pageSize){
        list.stream()
                .skip((pageNo-1)*pageSize)
                .limit(pageSize)
                .forEach(System.out::println);
    }
    public static void test05(){
        list.stream()
                .map(i->i*2)//对流中的每一个元素的值进行翻倍
                .forEach(System.out::println);
    }

    public static void test06(){
        list.stream()
                .sorted()
                .forEach(System.out::println);

        List<String> names=Arrays.asList("jack","tom","alice","lucy","lili","admin");
        names.stream()
                .sorted()
                .forEach(System.out::println);
    }

    public static void test07(){
        list.stream()
                .sorted((a,b)->b-a)
                .forEach(System.out::println);

        List<String> names=Arrays.asList("jack","tom","alice","lucy","lili","admin");
        names.stream()
                .sorted((o1,o2)->o1.length()-o2.length())
                .forEach(System.out::println);
    }

}
